package zsc.nine.onlinemall.mapper;

import org.apache.ibatis.annotations.*;
import zsc.nine.onlinemall.entity.Product;

import java.util.List;

/**
 * @author 莫远烙 产品的增删查改
 * @version 1.0
 */

@Mapper
public interface ProductMapper {
    //1、增加产品
    //2、删：
    //3、查看所有产品

    //4、更新名字
    //5、更新图片地址
    //6、更新原价
    //7、更新现价
    //8、更新库存
    //9、更新状态：0下架1上架
    //10、根据id查找产品

    /**
     *
     * @param product 产品类
     * @return true:成功,false:失败
     */
    //1、增加产品
    @Insert("insert into t_product(id,name,image,originPrice,nowPrice,stock,status)" +
            "values(#{id},#{name},#{image},#{originPrice},#{nowPrice},#{stock},#{status})")
    boolean insertProduct(Product product);

    /**
     *
     * @param id 产品Id
     * @return true:成功,false:失败
     */
    //根据id删除产品
    @Delete("delete from t_product where id = #{id}")
    boolean deleteAProduct(int id);

    /**
     *
     * @return 数据库里所有产品的产品列表
     */
    //查看所有产品
    @Select("select * from t_product")
    List<Product> findAllProduct();

    /**
     *
     * @param id 产品Id
     * @return 产品类
     */
    //根据id查找产品
    @Select("select * from t_product where id=#{id}")
    Product findProductById(int id);

    /**
     *
     * @param id 产品Id
     * @param name 待更新的名字
     * @return true:成功,false:失败
     */
    //02更新产品名字
    @Update("Update t_product set name=#{name} where id=#{id}")
    boolean updateNameById(int id, String name);

    /**
     *
     * @param id 产品Id
     * @param status 产状上下架态 1：上架，0：下架
     * @return true:成功,false:失败
     */
    //03更改产品状态：上下架
    @Update("Update t_product set status=#{status} where id=#{id}")
    boolean updateStatusById(int id, Integer status);

    /**
     *
     * @param id 产品Id
     * @param image 图片url
     * @return true:成功,false:失败
     */
    //04更新图片地址
    @Update("Update t_product set image=#{image} where id=#{id}")
    boolean updateImageById(int id, String image);

    /**
     *
     * @param id 产品id
     * @param originPrice 待更新的原价
     * @return true:成功,false:失败
     */
    //05更新原价
    @Update("Update t_product set originPrice=#{originPrice} where id=#{id}")
    boolean updateOriginPriceById(int id, double originPrice);

    /**
     *
     * @param id 产品id
     * @param nowPrice 待更新的现价
     * @return true:成功,false:失败
     */
    //06更新现价
    @Update("Update t_product set nowPrice=#{nowPrice} where id=#{id}")
    boolean updateNowPriceById(int id, double nowPrice);

    /**
     *
     * @param id 产品id
     * @param stock 待更新的库存
     * @return true:成功,false:失败
     */
    //07更新库存
    @Update("Update t_product set stock=#{stock} where id=#{id}")
    boolean updateStockById(int id, int stock);

    /**
     * @param key:排序索引可选字段：产品类的属性
     * @param index               分页起始位置
     * @param pageSize            分页大小
     * @return Order 列表升序
     * @deprecated key:该参数不生效，默认是id
     */
    //分页查询--不生效
    @Select("select * from t_product order by key=#{key} asc limit #{index},#{pageSize} ")
    List<Product> pagedFind(String key, int index, int pageSize);

    /**
     * @param index    分页起始位置
     * @param pageSize 分页大小
     * @return Order 列表升序,请调用 pagedFindByIdAsc
     */
    //分页查询升序
    @Select("select * from t_product order by id asc limit #{index},#{pageSize} ")
    List<Product> pagedFindByIdAsc(int index, int pageSize);

    //分页查询降序
    @Select("select * from t_product order by id desc limit #{index},#{pageSize} ")
    List<Product> pagedFindByIdDesc(int index, int pageSize);

    //模糊查询

    /**
     * @param likeName 产品字段
     * @return 产品列表
     */
    @Select("select * from t_product where name like '%' #{likeName} '%'")
    List<Product> findByLikeName(String likeName);


    /**
     * @return 共有多少行数
     * @author Zainus
     */
    @Select("select count(id) from t_order")
    String getLength();

}
